package org.kolonitsky.translator;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import java.util.HashMap;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import static org.kolonitsky.translator.Lang.CHINESE;
import static org.kolonitsky.translator.Lang.JAPANESE;

/**
 * @author Alex.Kolonitsky
 *
 * Base idea belog to Max Berezovsky and base implementation was done on JavaScript
 */
public class FakeTranslator extends BaseTranslator {

    protected static final Log LOG = LogFactory.getLog(FakeTranslator.class);

    private static final Map<Lang, String[]> texts = new HashMap<Lang, String []>();
    private static final Pattern EAST_LANGS_WORD_PATTERN = Pattern.compile("[a-z]{1,2}", Pattern.MULTILINE);
    private static final Pattern WEST_LANGS_WORD_PATTERN = Pattern.compile("\\w[^\\s]*");

    static {
        texts.put(Lang.CHINESE, "病毒威脅和其他安全問題的影避免您的PC通過組合和拆裝工具軟件保護操作系統安全更新和安全計算的做法在網絡上HP提供易於遵循的個人電腦安全方法和解決方在這裡一中心位置".split(""));
        texts.put(Lang.RUSSIAN, "Вирус угрозы и другие вопросы безопасности которые влияют на ПК можно избежать с помощью сочетания защиты программного обеспечения и инструменты удаления обновления операционной системы безопасности а также безопасные методы вычислений на веб-HP предоставляет простой в последующей персональных вычислительных систем безопасности и методы решения здесь в одном центральное расположение".split(" "));
        texts.put(Lang.ITALIAN, "Minacce di virus e altri problemi di protezione che interessano il vostro PC può essere evitato attraverso una combinazione di protezione del software e degli strumenti di rimozione operativo aggiornamenti di sicurezza del sistema e procedure di elaborazione sicuro sul web HP fornisce facile da seguire Personal Computing metodi e soluzioni di sicurezza qui in uno posizione centrale".split(" "));
        texts.put(Lang.SPANISH, "Virus de amenazas y otras cuestiones de seguridad que afectan a su PC puede evitarse mediante una combinación de protección de software y herramientas de eliminación de actualizaciones del sistema operativo de seguridad y normas de seguridad informática en la web de HP proporciona fácil de seguir de Computación Personal de métodos de seguridad y soluciones de aquí en un Ubicado en el centro".split(" "));
        texts.put(Lang.JAPANESE, "ウルイスの脅威とPCが提供する、HPのWebサイトのシステムのアップデートやセキュリティ情報のセキュリティ標準を、オペレーティングソフトウェアの保護と除去ツールを組み合わせることにより回避することができる影響を与える他のセキュリティ上の問題パーソナルコンピューティングに従うことは簡単セキュリティメソッドとその中心部に位置ここでのソリューション".split(""));
    }

    private final Pattern pattern;

    public FakeTranslator(Lang to) {
        super(to);
        this.pattern = (to == CHINESE || to == JAPANESE) ? EAST_LANGS_WORD_PATTERN : WEST_LANGS_WORD_PATTERN;
    }

    public String translate(String text) {
        Matcher matcher = pattern.matcher(text);
        StringBuffer sb = new StringBuffer();
        String[] fakeText = texts.get(to);
        if (fakeText == null) {
            // TODO log that we don't found
            return null;
        }

        for (int i = 0; matcher.matches(); i++) {
            matcher.appendReplacement(sb, fakeText[i % fakeText.length]);
        }
        matcher.appendTail(sb);
        return sb.toString();
    }
}
